import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * @author remichaoul
 */

// extends UnicastRemoteObject

public class Panier implements InterfacePanier{

    ArrayList <Article> ArticlePanier;
    InterfaceCatalogue monCatalogue;

    public Panier(InterfaceCatalogue catalogue) throws RemoteException{
        this.ArticlePanier = new ArrayList <Article>();

        this.monCatalogue=catalogue;


    }

    /**
     * ajoute un article dans le panier
     * @param article   article du catalogue
     * @param quantite  nombre d'articel a ajouter
     * @return  vrai si l'article est ajouté, faux sinon
     */
    public boolean AjouterArticle(Article article, int quantite) throws RemoteException{
        if(quantite<1) return false;
        if(article.getQuantite()<quantite) return false;
        for(Article art : ArticlePanier){
            if(art.getCle()==article.getCle()){
                art.setQuantite(art.getQuantite()+quantite);
                article.setQuantite(article.getQuantite()-quantite);
                return true;
            }
        }
        Article newArticle = new Article(article.getCle(),article.getPrix(),article.getDescription(),article.getMontype(),article.getAuteur(),quantite);
        ArticlePanier.add(newArticle);
        return true;
    }
    /**
     * retire un article du panier
     * @param article   article du catalogue
     * @param quantite  nombre d'article a retirer
     * @return  vrai si l'article est bien retire, faux sinon
     */
    public boolean RetirerArticle(Article article, int quantite) throws RemoteException{
        if(quantite<1) return false;
        for(Article art : ArticlePanier){
            if(art.getCle()==article.getCle()){
                if(art.getQuantite()>quantite){
                    art.setQuantite(art.getQuantite()-quantite);
                    article.setQuantite(article.getQuantite()+quantite);
                    return true;
                }
                else if(art.getQuantite()==quantite){
                    ArticlePanier.remove(art);
                    article.setQuantite(article.getQuantite()+quantite);
                    return true;
                }
                else return false;
            }
        }
        return false;
    }

    public boolean RetirerArticle(Article article) throws RemoteException{

        for(Article art:this.ArticlePanier){
            if(art.getCle()==article.getCle()){
                if(this.monCatalogue.RemettreArticle(art)){
                    this.ArticlePanier.remove(art);
                    return true;
                }
                else
                    return false;
            }
        }
        return false;


    }


    /**
     * supprime un article du panier
     * @param article   article du catalogue a retirer du panier
     * @return vrai si l'article est supprime, faux sinon
     */
    public boolean SupprimerArticle(Article article) throws RemoteException{
        for(Article art : ArticlePanier){
                if(art.getCle()==article.getCle()){
                    article.setQuantite(article.getQuantite()+art.getQuantite());
                    ArticlePanier.remove(art);
                    return true;
                }
        }
        return false;
    }

    /**
     * calcul le cout total du panier
     * @return le cout total du panier
     */
    public float CalculPanier() throws RemoteException{
        float lejusteprix=0;
        for(Article art : ArticlePanier){
            lejusteprix+=art.getQuantite()*art.getPrix();
        }
        return lejusteprix;
    }

    public void Commander() throws RemoteException{

    }

    public boolean AjouterArticle(Article art) throws RemoteException{
        if(this.monCatalogue.retirerArticle(art)){
            this.ArticlePanier.add(art);
            return true;
        }
        else
            return false;

    }


    public String voirCatalogue() throws RemoteException{
        String s ="voyons ce fameux catalogue \n";
        ArrayList<Article> listArticle = new ArrayList<Article>();
        if (this.monCatalogue.findByAutor("herrChaoul")!=null){
        listArticle = this.monCatalogue.findByAutor("herrChaoul");
        }
        for(Article art:listArticle){
            s=s+"Auteur:"+art.getAuteur()+" cle:"+art.getCle()+" Prix:"+art.getPrix();
        }
        return s;
    }

    public void test() throws RemoteException{
        System.out.println("ceci est un test");
    }
    public ArrayList <Article> getArticle(){
        return this.ArticlePanier;
    }

}
